package cn.com.dcsgo.service;

import cn.com.dcsgo.model.activity.ActivityInfo;
import cn.com.dcsgo.model.order.CartInfo;
import cn.com.dcsgo.model.product.SkuInfo;
import cn.com.dcsgo.vo.activity.ActivityRuleVo;
import cn.com.dcsgo.vo.order.OrderConfirmVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 活动表 服务类
 * </p>
 *
 * @author Dcsgo
 * @since 2025-04-19
 */
public interface ActivityInfoService extends IService<ActivityInfo> {
    /**
     * 分页查询
     *
     * @param pageParam 分页参数
     * @return IPage->ActivityInfo
     */
    IPage<ActivityInfo> getPage(Page<ActivityInfo> pageParam);

    /**
     * 通过id获取活动规则信息(规则+sku)
     *
     * @param id activity id
     * @return Map->List->rule and skuInfo
     */
    Map<String, Object> findActivityRuleList(Long id);

    /**
     * 添加活动规则
     *
     * @param activityRuleVo activityRuleVo
     */
    void saveActivityRule(ActivityRuleVo activityRuleVo);

    /**
     * 通过 sku name 获取 sku 列表，排除活动进行中的sku
     *
     * @param keyword sku name
     * @return List-> SkuInfo
     */
    List<SkuInfo> findSkuInfoBySkuName(String keyword);

    /**
     * 通过skuIds获取促销信息
     *
     * @param ids skuIds
     * @return Map-> skuId:List->String(促销简略信息)
     */
    Map<Long, List<String>> getActivitySimpleInfoBySkuIds(List<Long> ids);

    /**
     * 获取商品关联的促销信息
     *
     * @param skuId  skuId
     * @param userId userId
     * @return Map-> ActivityInfo | CouponInfo
     */
    Map<String, Object> getActivityAndCouponInfo(Long skuId, Long userId);

    /**
     * 获取指定用户购物车的结算信息
     *
     * @param userId 用户id
     * @param items  购物车中的商品
     * @return 结算信息
     */
    OrderConfirmVo getCartSettlementInformation(Long userId, List<CartInfo> items);
}
